package com.zhava.crawler.client.response;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import java.util.Map;

/**
 * 分页式爬虫响应结果
 *
 * @author zhaxiang
 */
@Data
@Schema(description = "分页式爬虫响应结果")
public class PaginatedCrawlerResponse {

    /**
     * 请求URL基本地址
     */
    @Schema(description = "原始请求URL")
    private String sourceUrl;

    /**
     * 爬取状态码
     */
    @Schema(description = "爬取状态码，200表示成功，4xx或5xx表示失败")
    private Integer statusCode;

    /**
     * 已爬取的页数
     */
    @Schema(description = "成功爬取的页数")
    private Integer pagesCollected;

    /**
     * 各页爬取结果
     */
    @Schema(description = "各页面的爬取结果")
    private List<PageResult> pageResults;

    /**
     * 爬取时间（毫秒）
     */
    @Schema(description = "总爬取耗时（毫秒）")
    private Long totalCrawlTime;

    /**
     * 是否已导出文件
     */
    @Schema(description = "是否已导出文件")
    private Boolean fileExported;

    /**
     * 导出文件路径
     */
    @Schema(description = "导出文件路径，仅在导出文件时有值")
    private String exportedFilePath;

    /**
     * 错误信息，如果有
     */
    @Schema(description = "错误信息，仅在爬取失败时有值")
    private String errorMessage;

    /**
     * 单页爬取结果
     */
    @Data
    @Schema(description = "单页爬取结果")
    public static class PageResult {
        
        /**
         * 页码
         */
        @Schema(description = "页码")
        private Integer pageNumber;
        
        /**
         * 页面URL
         */
        @Schema(description = "页面URL")
        private String pageUrl;
        
        /**
         * 提取的数据
         */
        @Schema(description = "根据选择器提取的数据")
        private Object extractedData;
        
        /**
         * 爬取状态码
         */
        @Schema(description = "此页爬取状态码")
        private Integer statusCode;
        
        /**
         * 爬取时间（毫秒）
         */
        @Schema(description = "此页爬取耗时（毫秒）")
        private Long crawlTime;
        
        /**
         * 错误信息，如果有
         */
        @Schema(description = "此页错误信息，仅在爬取失败时有值")
        private String errorMessage;
    }
} 